产品集成资源文档定价
立即开始

© 2026 CapSolver. All rights reserved.

联系我们

Slack: lola@capsolver.com

产品

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • 浏览器插件
  • 更多验证码类型

集成

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • 合作伙伴
  • 查看所有集成

资源

  • 推荐返佣系统
  • 官方文档
  • API 参考
  • 博客
  • 常见问题 (FAQ)
  • 术语表
  • 系统状态

法律声明

  • 服务条款
  • 隐私政策
  • 退款政策
  • 请勿出售我的信息
博客/web scraping/使用Colly进行Go语言网络爬虫
Jul04, 2024

使用Colly进行Go语言网络爬虫

Ethan Collins

Ethan Collins

Pattern Recognition Specialist

网络爬虫 是一种从网站中提取数据的方法。在 Golang 中,由于其简单性和强大的功能,Colly 库是网络爬虫的流行工具。本指南将引导您设置一个 Golang 项目,使用 Colly 构建一个基本的爬虫,处理复杂的数据提取场景,并通过并发请求优化您的爬虫。

设置您的 Golang 项目

在开始之前,请确保您的系统上已安装 Go。使用以下命令初始化您的项目并获取 Colly 包:

bash Copy
go mod init my_scraper
go get -u github.com/gocolly/colly

这将设置您的项目目录并安装 Colly 包。

领取您的 CapSolver 奖励代码

立即提升您的自动化预算!
在充值 CapSolver 账户时使用奖励代码 CAPN,每次充值可获得额外 5% 奖励 —— 无限制。
现在在您的 CapSolver 仪表板 中领取
。

构建一个基本的爬虫

让我们创建一个基本的爬虫,从特定的维基百科页面中提取所有链接。

  1. 创建一个名为 main.go 的新文件,并添加以下代码:
go Copy
package main

import (
    "fmt"
    "github.com/gocolly/colly"
)

func main() {
    c := colly.NewCollector(
        colly.AllowedDomains("en.wikipedia.org"),
    )

    c.OnHTML(".mw-parser-output", func(e *colly.HTMLElement) {
        links := e.ChildAttrs("a", "href")
        fmt.Println(links)
    })

    c.Visit("https://en.wikipedia.org/wiki/Web_scraping")
}

此代码初始化一个限制为 en.wikipedia.org 的 Colly 收集器,然后设置一个回调函数,用于查找并打印页面中 .mw-parser-output div 内的所有链接。

爬取表格数据

对于更复杂的任务,例如爬取表格数据并将其写入 CSV 文件,可以使用 Go 中的 encoding/csv 包:

  1. 在 main.go 中添加以下代码以爬取表格数据:
go Copy
package main

import (
    "encoding/csv"
    "log"
    "os"
    "github.com/gocolly/colly"
)

func main() {
    fName := "data.csv"
    file, err := os.Create(fName)
    if err != nil {
        log.Fatalf("Could not create file, err: %q", err)
        return
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    c := colly.NewCollector()

    c.OnHTML("table.wikitable", func(e *colly.HTMLElement) {
        e.ForEach("tr", func(_ int, row *colly.HTMLElement) {
            rowData := []string{}
            row.ForEach("td", func(_ int, cell *colly.HTMLElement) {
                rowData = append(rowData, cell.Text)
            })
            writer.Write(rowData)
        })
    })

    c.Visit("https://en.wikipedia.org/wiki/List_of_programming_languages")
}

此脚本从维基百科页面中爬取表格数据并写入 data.csv 文件。

并发请求

为了加快爬取速度,您可以使用 Go 的协程(goroutines)进行并发请求。以下是并发爬取多个页面的方法:

go Copy
package main

import (
    "fmt"
    "github.com/gocolly/colly"
    "sync"
)

func scrape(url string, wg *sync.WaitGroup) {
    defer wg.Done()
    
    c := colly.NewCollector()
    
    c.OnHTML("title", func(e *colly.HTMLElement) {
        fmt.Println("Title found:", e.Text)
    })
    
    c.Visit(url)
}

func main() {
    var wg sync.WaitGroup
    urls := []string{
        "https://en.wikipedia.org/wiki/Web_scraping",
        "https://en.wikipedia.org/wiki/Data_mining",
        "https://en.wikipedia.org/wiki/Screen_scraping",
    }

    for _, url := range urls {
        wg.Add(1)
        go scrape(url, &wg)
    }

    wg.Wait()
}

在此示例中,我们定义了一个 scrape 函数,该函数接受一个 URL 和一个等待组作为参数。该函数初始化一个 Colly 收集器,设置一个回调函数以打印页面标题,然后访问该 URL。main 函数创建一个等待组,遍历 URL 列表,并为每个 URL 启动一个协程以并发爬取。

通过遵循这些步骤,您可以使用 Colly 构建强大的网络爬虫,处理各种爬取场景,并通过并发请求优化性能。如需更详细的教程和高级用法,请查看关于使用 Go 和 Colly 进行网络爬虫的资源。

其他 Go 语言网络爬虫库

除了 Colly 之外,还有几个其他优秀的 Go 语言网络爬虫库:

  • GoQuery:该库提供类似于 jQuery 的语法和功能集,使您能够轻松地进行网络爬虫操作,就像在 jQuery 中一样。
  • Ferret:一个便携、可扩展且快速的网络爬虫系统,旨在简化从网络中提取数据。Ferret 通过一种独特的声明式语言专注于数据提取。
  • Selenium:以其无头浏览器功能而闻名,Selenium 非常适合爬取动态内容。虽然它没有官方的 Go 支持,但有一个可用的端口,允许在 Go 项目中使用。

结论

网络爬虫是高效从网站中提取数据的强大且必不可少的技能。使用 Golang 和 Colly 库,您可以构建能够处理各种数据提取场景的稳健爬虫,从收集简单的链接到提取复杂的表格数据,并通过并发请求优化性能。

在本指南中,您学习了如何:

  1. 使用 Colly 库设置 Golang 项目。
  2. 构建一个基本爬虫,从网页中提取链接。
  3. 处理更复杂的数据提取,例如爬取表格数据并将其写入 CSV 文件。
  4. 通过并发请求优化您的爬虫。

通过遵循这些步骤,您可以创建高效且有效的 Golang 网络爬虫,利用 Colly 的简洁性和强大功能。如需更高级的用法和详细教程,请探索关于使用 Go 和 Colly 进行网络爬虫的其他资源。

常见问题

1. Colly 是否适合学习网络爬虫的初学者?

是的。Colly 设计简单且适合初学者,同时提供了强大的功能,如 DOM 解析、请求处理、回调函数和并发。即使是新接触 Go 的开发者也可以仅用几行代码快速构建一个功能爬虫。


2. Colly 能否爬取结构化内容,如表格或列表?

当然可以。Colly 允许选择特定的 HTML 节点和属性,这使得提取表格、列表、链接和其他结构化元素变得简单。您还可以使用 Go 的标准库直接将结果存储到 CSV 或 JSON 文件中。


3. 如何加快您的 Colly 网络爬虫?

您可以使用 Go 的协程(goroutines)并行处理多个页面。通过同时启动爬虫并使用等待组进行同步,可以显著提升爬虫性能——特别是在处理大型数据集或多 URL 爬取任务时。

查看更多

web scrapingApr 22, 2026

Rust网络爬虫架构:可扩展的数据提取

学习可扩展的Rust网络爬虫架构,包括reqwest、scraper、异步爬取、无头浏览器爬取、代理轮换以及符合规范的验证码处理。

Ethan Collins
Ethan Collins
web scrapingMar 02, 2026

面向开发者的浏览器自动化:2026年掌握Selenium与验证码

通过这份2026年指南,掌握浏览器自动化开发。学习Selenium WebDriver Java、Actions接口以及如何使用CapSolver解决验证码。

Sora Fujimoto

目录

Sora Fujimoto
web scrapingFeb 17, 2026

如何在Nanobot中使用CapSolver解决验证码

使用 Nanobot 和 CapSolver 自动化验证码解决。使用 Playwright 自主解决 reCAPTCHA 和 Cloudflare。

Anh Tuan
Anh Tuan
web scrapingFeb 10, 2026

数据即服务(DaaS):它是什么以及为何在2026年重要

了解2026年的数据即服务(DaaS)。探索其优势、应用场景以及如何通过实时洞察和可扩展性改变企业。

Rajinder Singh
Rajinder Singh